#include <iostream>
#include <stdlib.h>

#include <nemesis.Logger.h>

#include <nemesis.dbms.Connection.h>

#include <nemesis.dbos.AutoObject.h>

#include <dbos_demo.defines.h>

#include <dbos_demo.oodb.Table01.h>

#include <dbos_demo.phase.Unload.h>

using namespace std;
using namespace nemesis;
using namespace dbos_demo;

void phase::Unload::do_comment () const
   throw ()
{
   cout << "Carga un registro y lo descarga. El resultado deberia ser que el hueco se use inmediatamente, por lo que" << endl;
   cout << "volvemos a cargar OTRO registro y verificamos que el hueco reusado es el que acabamos de generar" << endl;
}

void phase::Unload::do_apply (dbms::Connection& connection)
   throw (RuntimeException, dbms::DatabaseException)
{
   using namespace nemesis::dbms;

   Guard guard (connection);

   const int id (rand () % MaxKey01), id2 (rand () % MaxKey01);
   
   oodb::Table01* table01_1 (NULL);
   oodb::Table01* table01_2 (NULL);

   table01_1 = oodb::Table01::instanciate (connection, id);
    
   LOGINFORMATION (
      string msg (table01_1->asString ());
      msg += " | Primer carga";      
      Logger::information (msg, FILE_LOCATION);
   );

   oodb::Table01::erase (table01_1);
    
   table01_2 = oodb::Table01::instanciate (connection, id2);
    
   LOGINFORMATION (
      string msg (table01_2->asString ());
      msg += " | Segunda carga";      
      Logger::information (msg, FILE_LOCATION);
   );
}

